package ace.tool.generate.code.impl.resolver.scheme.model;

import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author caspar
 * @date 2023/11/17 9:57
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class EntityClassSchemeInput {

  /**
   * contract api 类的包路径后缀
   */
  @Builder.Default private String feignApiPackageSuffix = ".sdk.core.contract";

  /**
   * dto类的包路径后缀
   */
  @Builder.Default private String dtoPackageSuffix = ".api.model.dto";

  /**
   * dto类名后缀
   */
  @Builder.Default private String dtoClassNameSuffix = "Dto";

  /**
   * contract api 类名称后缀
   */
  @Builder.Default private String feignApiClassNameSuffix = "FeignApiClassInfo";

  /**
   * contract 类的包路径后缀
   */
  @Builder.Default private String feignPackageSuffix = ".sdk.core.contract.impl";

  /**
   * contract 类名称后缀
   */
  @Builder.Default private String feignClassNameSuffix = "Feign";

  /**
   * api 类的包路径后缀
   */
  @Builder.Default private String apiPackageSuffix = ".api";

  /**
   * api 类名后缀
   */
  @Builder.Default private String apiClassNameSuffix = "Api";

  /**
   * rest sdk controller 类的包路径后缀
   */
  @Builder.Default private String restSdkControllerPackageSuffix = ".core.impl.controller.rest";

  /**
   * rest sdk controller 类名后缀
   */
  @Builder.Default private String restSdkControllerClassNameSuffix = "RpcController";

  /**
   * contract namce contextId path 的配置前缀
   */
  @Builder.Default private String feignConfigPrefix = "ace.cloud.openfeign.client";

  /**
   * manager 类的包路径后缀
   */
  @Builder.Default private String managerPackageSuffix = ".core.impl.manager";

  /**
   * manager 类的包路径后缀
   */
  @Builder.Default private String managerClassNameSuffix = "Manager";

  /**
   * manager impl 类的包路径后缀
   */
  @Builder.Default private String managerImplPackageSuffix = ".core.impl.manager.impl";

  /**
   * manager impl 类的包路径后缀
   */
  @Builder.Default private String managerImplClassNameSuffix = "ManagerImpl";

  @NotNull private Class params;
}
